package main

import (
	"command/worker"
	"fmt"
	"github.com/PuerkitoBio/goquery"
	"regexp"
	"strconv"
)

func main() {
	// 设置请求头
	url := "https://www.18183.com/gonglue"

	// 主题和url
	gameAndUrl(url)
}

// 主题和url
func gameAndUrl(url string) {
	var h worker.Helper
	dom, err := h.Dom(url)
	if err != nil {
		panic(err)
		return
	}

	// 创建通道
	var wk = worker.Engine{}
	wk.CreateWorker()

	// 遍历每个类目获取文章详情
	dom.Find(".left_hot_game .item").Each(func(i int, s *goquery.Selection) {
		// 开启协程读取每个类目
		go func() {
			title := s.Find(".center span").Text() // 游戏名称
			uri, _ := s.Find(".center a").Attr("href") // 列表url
			uri = uri + "gonglue"

			nextPageUrl, pageTotal := pageUrl(uri)
			nextPageUrl = uri + nextPageUrl // 下一页url

			// 从第一页开始，遍历所有分页获取列表
			for i = 1; i <= pageTotal; i++ {
				next := fmt.Sprintf(nextPageUrl, i)
				// 把列表url丢给channel处理
				scheduleTmp := worker.Schedule{
					Title: title,
					Url: next,
				}
				wk.InWorker(scheduleTmp)
			}
		}()
	})

	wk.Run()
}

// 详情列表
func detailList(url string) []string {
	var h worker.Helper
	dom, err := h.Dom(url)
	if err != nil {
		panic(err)
	}
	detailList := []string{}
	dom.Find(".main .left_right .left .item").Each(func(i int, s *goquery.Selection) {
		detailUri, _ := s.Find(".info a").Attr("href")
		// 文章详情 TODO 这里就抛给队列
		detailList = append(detailList, detailUri)
	})
	return detailList
}

// 下一页
func pageUrl(url string) (string, int) {
	var h worker.Helper
	dom, err := h.Dom(url)
	if err != nil {
		panic(err)
	}
	nextUrl, _ := dom.Find(".la-pages li").Eq(2).Find("a").Attr("href")
	preg := `list\_(\d{5})\_(\d+)\.html`
	match := regexp.MustCompile(preg).FindStringSubmatch(nextUrl)
	next := "/list_" + match[1] + "_%d.html"
	totalPageStr := dom.Find(".la-pages #fye .pageinfo strong").Eq(0).Text()
	totalPage, _ := strconv.Atoi(totalPageStr)
	return next, totalPage
}